# Training function for supervised learning models
import time

def train(model, X_train, y_train, sample_weight=None):
    """
    @brief 训练监督学习模型

    @param model: SupModel 的子类实例，表示要训练的模型
    @param X_train: 训练特征数据
    @param y_train: 训练标签数据
    @param sample_weight: 样本权重，可选
    @return: 训练时间（秒）

    @exception TypeError: 如果 model 不是 SupModel 的子类实例
    @exception ValueError: 如果 X_train 或 y_train 为空
    @exception RuntimeError: 如果模型训练失败
    """
    start = time.time()
    if sample_weight is not None:
        model.fit(X_train, y_train, sample_weight=sample_weight)
    else:
        model.fit(X_train, y_train)
    elapsed = time.time() - start
    return elapsed